<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>
        // 模拟最初的dispatch
        function dispatch(action) {
            if (typeof action === "object") {
                if (action.type) {
                    console.log('通过')
                } else {
                    throw Error("action中必须有一个type属性！")
                }
            } else {
                throw Error("action必须是一个对象！")
            }
        }

        // dispatch({ type: "ADD" })

        // 添加中间件 (增强dispatch)
        // 保留原来功能 -- 扩展其他功能
        // 在不修改源代码的基础上拓展功能

        // 保留原来的dispatch
        let oldDispatch = dispatch
        
        // 添加新的功能
        let superDispatch = (action) => {
            if (typeof action === "function") {
                console.log('我现在里面可以写函数啦')
            } else {
                oldDispatch(action)
            }
        }

        superDispatch(() => {
            axiso.get('url').then(res => {
                superDispatch({ type: "ADD", res: res.data })
            })
        })
    </script>
</body>
</html>